#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace ns_complie_and_run;
using namespace httplib;

//./compile_server port
void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}
int main(int argc,char *argv[])
{
    if(argc!=2)
    {
        Usage(argv[0]);
        return 1;
    }

    Server svr;

    svr.Get("/hello", [](const Request &req, Response &resp)
            { resp.set_content("hello httplib,你好 httplib!", "conyent-type:text/plain;charset=utf -8"); });

    svr.Post("/compile_and_run", [](const Request &req, Response &resp)
             {
        //用户请求的服务正文即json string
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty()){
            CompileAndRun::Start(in_json,&out_json);
            resp.set_content(out_json,"application/json;charset=utf -8");
        } });

    // svr.set_base_dir("./wwwroot");
    svr.listen("0.0.0.0", atoi(argv[1])); // 启动http服务

    // std::string code = "code";
    // Complier::Compile(code);
    // Runner::Run(code);

    // std::string in_json;

    // Json::Value in_value;
    // in_value["code"] = R"(#include<iostream>
    // int main(){
    //      std::cout <<"演都不演了" << std::endl;
    //      int *p = new int(1024*1024*20);
    //       return 0;
    // })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240 * 3;

    // Json::FastWriter writer;
    // in_json = writer.write(in_value);

    // std::cout << in_json << std::endl;
    // std::string out_json;
    // CompileAndRun::Start(in_json,&out_json);
    // std::cout << out_json << std::endl;
    // return 0;
    // Json::Value in_value;
    // Json::Reader reader;
    // Json::StreamWriterBuilder writer;

    // // 直接设置字符串，让 JSON 库处理编码
    // in_value["code"] = "#include<iostream>\nint main(){\n    std::cout << \"演都不演了\" << std::endl;\n    while(1);\n    return 0;\n}";

    // // 输出时设置不转义 Unicode
    // writer["indentation"] = "";
    // writer["emitUTF8"] = true; // 直接输出 UTF-8，不进行 Unicode 转义

    // std::string in_json = Json::writeString(writer, in_value);
    // std::cout << in_json << std::endl;
    // std::string out_json;
    // CompileAndRun::Start(in_json,&out_json);
    // std::cout << out_json << std::endl;

    return 0;
}